/*
 * Created on 4 mai 2005
 * Laste release on june 2008
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package learning;

import java.awt.Color;
import java.awt.Graphics;
import perception.*;

/**
 * @author deloor
 *
 * Un MemoryPattern synthétise tout ce qui est associé à une qualité dans un algorithme
 * à différence temporel. Il s'agit d'un état (ici un PositionLearnerPerception, d'une action
 * et de la qualité associée.
 * Amélioration : la perception ne devrait pas être une PositionLearnerPerception, mais une classe
 * abstraite "LearnerPerception", qui serait dans certains cas une PositionLearnerPerception et dans d'autres
 * une "LocalPerception" par exemple .
 */
public class MemoryPattern {

    private Perception _perception;
    private String _action;
    private float _qualitie;

    public MemoryPattern(Perception state, float qualitie, String action) {
        _perception = state.copy();
        _qualitie = qualitie;
        _action = action;
    }

    public Perception getPerception() {
        return _perception;
    }

    public float getQualitie() {
        return _qualitie;
    }

    public String getAction() {
        return _action;
    }

    public void setQualitie(float q) {
        _qualitie = q;
    }

    public void draw(Graphics g, int stepX, int stepY) {
        float bestValue = _perception.getAgent().getBestValueForState(_perception);
        float colorValue = bestValue / _perception.getAgent().getBestQuality();
        if (colorValue < 0) {
            colorValue = 0;
        }
        if (colorValue > 1) {
            colorValue = 1;
        }
        g.setColor(new Color(colorValue, 0, 0));
        g.fill3DRect((int) (_perception.getPosition().x * stepX), (int) (_perception.getPosition().y * stepX), stepX - 2, stepY - 2, true);
    }
}
